# 数据类型
# 数据类型转换
"""""
int(x):将x转化为一个整数
float(x):将x转化为一个浮点数
str(x):将x转化为一个字符串
chr(x):将整数x转化为一个unicode表中的字符
ord(x):将一个unicode表中的字符x转换为其对应的整数值
hex(x):将一个整数转换为十六进制字符串
oct(x):将整数转换为八进制字符串
bin(x):将整数转换为二进制字符串
"""""
# 数据类型转换
def data_type_convert():
    print("-" * 50, "字符串 - 字节", "-" * 50)
    name = "紫嫣"
    name_byte = name.encode("utf-8")
    print("字符串转字节：", name_byte)
    print("字节转字符串：", name_byte.decode("utf-8"))

    print("-" * 50, "浮点数 - 整数", "-" * 50)
    # 浮点数转化为整数,小数部分会丢失
    f_num = 13.14
    num = int(f_num)
    print("浮点数：", f_num)
    print("浮点数转化为整数,小数部分会丢失：", num)

    print("-" * 50, "字符串 - 整数", "-" * 50)
    s_num = str(num)
    s_f_num = str(f_num)
    print(num, type(s_num), f_num, type(s_f_num))
# 进制转换
def binary_convert():
    print("-" * 50, "进制转换", "-" * 50)
    print("二进制转十进制:", int("101010", base=2))
    print("八进制转十进制:", int("101010", base=8))
    print("十六进制转十进制:", int("101010", base=16))
# 查看数据类型
def show_type():
    print("-" * 50, "查看数据类型", "-" * 50)
    s = "abc"
    num = 100
    f_num = 13.14
    print(s, type(s))
    print(num, type(num))
    print(f_num, type(f_num))

def show_bool():
    print("-" * 50, "布尔类型", "-" * 50)
    """
    布尔值为False：
    1、False 或者 None
    2、数值中的 0 包含0.0，虚数0
    3、空序列，包含空字符串，空元组，空列表，空字典，空集合
    4、自定义对象的实例，该对象的 __bool__()  返回值False 或者 __len__()方法返回0
    """
    print("False 或者 None本身就是False：", bool(False), bool(None))
    print("数值中的 0 包含0.0，虚数0：", bool(0), bool(0.0))
    print("空序列，包含空字符串，空元组，空列表，空字典，空集合：")
    print("空字符串：", bool(""))
    print("空元组，空列表，空字典，空集合：", bool(tuple()), bool(list()), bool(dict()))
    class Student:
        id = None
        age = 0
        # 如果没有__bool__()方法，__len__()方法返回0时，对象的布尔值就为False
        # 如果有__bool__()方法，__len__()方法返回0时不起作用
        def __len__(self):
            return 1
        # __bool__()方法返回False，调用bool(对象)就返回False
        def __bool__(self):
            return True
    student = Student()
    print("student的布尔值", bool(student))

if __name__ == '__main__':
    show_bool()